AWS Verified Access がTCP経由での接続をサポートしました (プレビュー) #AWSreInvent
いろんなプロトコルにVerified Accessを介してアクセスしたい
こんにちは、のんピ(@non____97)です。
皆さんはいろんなプロトコルにVerified Accessを介してアクセスしたいなと思ったことはありますか? 私はあります。
Verified Access を用いることでVPNを用意しなくともさまざまなアプリケーションへ接続することが可能です。さらにデバイス信頼プロバイダーを使用すれば、デバイスの状態を元に認証認可を行なうことだって可能です。
リリースされて2年間Verified Accessは元々HTTPとHTTPSのみサポートしていました。
そんな折、プレビューですがTCPもサポートしてくれるようになりました。
AWS Blogsにも投稿されています。
これによってWebアプリケーションだけでなく、SSHやRDP、DB接続、SMTPなどさまざまなプロトコルで接続することが可能になります。
非常に夢が広がりますね。
実際に触ってみました。
やってみた
検証環境
検証環境の構成図は以下のとおりです。
Verified Access経由でEC2インスタンスにSSH接続をします。
Verified Access信頼プロバイダーの作成
Verified Accessのリソースを順次作成します。
まずは信頼プロバイダーです。
今回はユーザー信頼プロバイダーでプロバイダータイプをIAM Identity Centerとします。
作成したリソースは以下のとおりです。
Verified Accessインスタンスの作成
続けてVerified Accessインスタンスの作成をします。
先ほど作成した信頼プロバイダーを指定してあげます。
作成したリソースは以下のとおりです。
ログ記録設定やWAFとの統合は今回は行いません。
Verified Accessグループの作成
Verified Accessグループの作成を行います。
設定したポリシーは以下のとおり、IAM Identitty Centerの認証を突破したユーザーすべてとします。
permit(principal,action,resource)
when {
true
};
そのほかのポリシーの書き方は以下AWS公式ドキュメントが参考になります。
Verified Access エンドポイントを作成
Verified Access エンドポイントを作成します。
先ほど作成したグループを指定します。
プロトコルとしてTCP
を指定します。
VPCの特定CIDR内に配置されたIPアドレスでTCP/3389もしくはTCP/22が空いているものに接続できるように設定します。
ポリシーはグループ側で設定したので未設定です。
作成すると以下のようになります。
アクティブ IP アドレスのドメイン名
を確認すると、指定したCIDRにVerified Accessのエンドポイントが作成されるようにしてしまったので、すでに一つ追加されてしまっています。
クライアント構成ファイルのエクスポート
Verified Accessを使用する際に必要なクライアント構成ファイルのエクスポートします。
マネジメントコンソールで信頼ポリシーからエクスポートすることも可能ですが、今回はexport-verified-access-instance-client-configurationを使用します。
AWS CLI v2の場合は2.22.8
以降から使用できます。
> aws ec2 export-verified-access-instance-client-configuration \
--verified-access-instance-id "vai-0ea88838150499c9d"
{
"Version": "1.0",
"VerifiedAccessInstanceId": "vai-0ea88838150499c9d",
"Region": "us-east-1",
"DeviceTrustProviders": [],
"UserTrustProvider": {
"Type": "iam-identity-center",
"Scopes": "verified_access:application:connect",
"Issuer": "https://identitycenter.amazonaws.com/ssoins-722375f388e8cd2d",
"PkceEnabled": true
},
"OpenVpnConfigurations": [
{
"Config": "Y2x..(略)..WU=",
"Routes": [
{
"Cidr": "2600:1f18:216d:aa00::/57"
}
]
}
]
}
Connectivity Clientのインストール
TCPで接続する際はConnectivity Clientというソフトウェアをローカル端末にインストールする必要があります。
現時点では以下の3つのクライアントをサポートしています。
- macOS Apple silicon版
- macOS Interl CPU版
- Windows版
ダウンロードリンクは以下のとおりです。
ウィザードに従いインストールまで完了すると以下のようにConnectivity Clientが自動で起動します。
Connectivity Clientの設定
先ほどエクスポートしたクライアント構成ファイルを用いてConnectivity Clientの設定を行います。
私はmacOSなので/Library/Application\ Support/Connectivity\ Client/ClientConfig-1.json
というパスに所有者rootで配置しました。
> sudo vi /Library/Application\ Support/Connectivity\ Client/ClientConfig-1.json
Password:
> ls -l /Library/Application\ Support/Connectivity\ Client/
total 216
-rw-r--r--@ 1 root wheel 2959 12 2 03:04 ClientConfig-1.json
drwxr-xr-x 7 root wheel 224 12 2 03:04 Launch/
drwxr-xr-x 7 root wheel 224 12 2 03:04 Staging/
drwxr-xr-x 4 root wheel 128 12 2 03:04 User/
srwxr-xr-x 1 root wheel 0 12 2 03:04 connectivityclient-messagebroker.sock=
-rw-r--r-- 1 root wheel 4096 12 2 03:04 connectivityclient-secure-store.db
-rw-r--r-- 1 root wheel 32768 12 2 03:04 connectivityclient-secure-store.db-shm
-rw-r--r-- 1 root wheel 61832 12 2 03:04 connectivityclient-secure-store.db-wal
srwxr-xr-x 1 root wheel 0 12 2 03:04 connectivityclient-shell.sock=
-rw-r--r-- 1 root wheel 272 12 2 03:04 dbsettings.json
Windowsの場合はC:\ProgramData\Connectivity Client
で、所有者がAdminである必要があります。
また、実際の運用ではこちらのファイルを対象の全クライアントに配布することになります。
なお、ローンチブログではClientConfig1.json
というファイル名でファイルを作成していますが、こちらではエラーになります。
以下ドキュメントで紹介されているとおり、プレフィックスはClientConfig-
である必要があります。
Use the export-verified-access-instance-client-configuration command. Save the output to a .json file. The file name must start with the ClientConfig- prefix.
Connectivity Client for AWS Verified Access - AWS Verified Access
このままサインインしようとすると、以下のようにタイムアウトしてしまいます。
Connectivity Clientを用いた認証
クライアント構成ファイルを設定したので、Connectivity Clientを用いた認証を行います。
Connectivity Clientにてサインイン
をクリックすると、ブラウザウィンドウが開きます。
その後は通常のIAM Identity Centerと同様に認証情報を入力していきます。
最後まで入力するとConnectivity Client がデータにアクセスすることを許可しますか?
と聞かれます。
アクセスを許可
をクリックするとYou have successfully signed in Continue to Connectivity Client.
と表示されます。
すると、Status 接続中
となります。
このまま待っているとPylon アプリを再起動してください。このエラーが続く場合は、管理者に連絡してください。
と表示されました。
指示に従いConnectivity Clientを再起動しても変わりありませんでした。また、Connectivity Clientを再インストールをしても変わりありませんでした。
診断ログには大量のエラー結果が出力されていました。しかし、この時点で、AM 3:47。心が折れる音がしました。
Verified Accessの可能性が一気に広がった
AWS Verified Access がTCP経由での接続をサポートしたアップデートを紹介しました。
残念ながら私の環境では接続することはできませんでしたが、SSHやRDPなどの管理系のプロトコルを用いた接続の認証を簡略化したい場合や、Webアプリではないクラサバ式のアプリにも使える非常にありがたいアップデートだと思います。
注意点としては別途クライアントには構成ファイルを配布し、Connectivity Clientをインストール設定する必要がある点です。何かしらのソフトウェア配布の仕組みの導入が必要だと考えます。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!